global aux = "auxiliary files"

*generate firm-time-level industry code
use "ENIA_F1", clear
bys ID_FIRMA AÑO: egen den = sum(f1_sale_it)
bys ID_FIRMA AÑO CIIU: egen num = sum(f1_sale_it)
gen sh = num / den
collapse (mean) sh, by(ID_FIRMA CIIU AÑO)
gsort ID_FIRMA AÑO -sh
collapse (first) sh CIIU, by(ID_FIRMA AÑO)
keep CIIU ID_FIRMA AÑO
sort ID_FIRMA AÑO
ren AÑO AÃ‘O
save "ENIA_F1_CIIU_by_Sales_Criterion.dta", replace

*generate plant-firm mapping file 
use "ENIA_F1", clear
collapse f1_sale_it, by(ID_FIRMA ID_PLANTA AÑO)
ren AÑO AÃ‘O
sort ID_PLANTA AÃ‘O
drop f1_sale_it
save "ENIA_F1_list_of_ID_PLANTA_ID_FIRMA.dta", replace


use "ENIA_F3_raw.dta", clear

joinby ID_PRODUCTO using "ID_CPC1.0_5D_3D.dta" ,unmatched(both) update _merge(merge) /* This is a confidential file mapping fake 5-digit product codes into fake 3-digit product codes */
tab merge
keep if merge==3
drop merge

replace F3_P11=0 if F3_P11==.


**** transform unit measures
replace  F3_P4= F3_P4*1000 if F3_P3=="t" /* ton to kgr */
replace F3_P7=F3_P7 *1000 if F3_P3=="t"
replace F3_P3="kgr" if F3_P3=="t"
replace F3_P3="kgr" if F3_P3=="kg"

replace  F3_P4= F3_P4*1000 if F3_P3=="miles" /* thousands to units */
replace F3_P7=F3_P7*1000 if F3_P3=="miles"
replace F3_P3="unit" if F3_P3=="miles"
replace F3_P3="unit" if F3_P3=="u"

replace  F3_P4= F3_P4*1000 if F3_P3=="m3" /* cubic metre to litre */
replace F3_P7=F3_P7*1000 if F3_P3=="m3"
replace F3_P3="litre" if F3_P3=="m3"
replace F3_P3="litre" if F3_P3=="l"
replace F3_P3="Missing" if F3_P3==""

replace F3_P3="litre" if F3_P3=="L" /* L to litre */

replace  F3_P4= F3_P4*1000 if F3_P3=="miles l" /* thousands of litres to litre */
replace F3_P7=F3_P7*1000 if F3_P3=="miles l"
replace F3_P3="litre" if F3_P3=="miles l"

replace  F3_P4= F3_P4*0.0929 if F3_P3=="ft2" /* ft2 to m2 */
replace F3_P7=F3_P7*0.0929 if F3_P3=="ft2"
replace F3_P3="m2" if F3_P3=="ft2"

replace  F3_P4=. if F3_P3=="s/u" /* without unit */
replace F3_P7=. if F3_P3=="s/u"

generate f3_venta_exp=(F3_P11*F3_P7)/100
tab F3_P3

rename F3_P3 f3_unidad

*** collapse by cpc 5 digits
collapse (firstnm) N_ID_PRODUCTO (sum) f3_cantidad_producida=F3_P4 f3_costo_produccion=F3_P5 ///
f3_cantidad_ventas=F3_P7 f3_valor_ventas=F3_P8 f3_venta_exp, by(ID_PLANTA ID_PRODUCTO AÃ‘O f3_unidad)

generate mean_unit_p_sale_ijt=(f3_valor_ventas)/(f3_cantidad_ventas)
gen f3_prod_p_sale_ijt=f3_cantidad_producida*mean_unit_p_sale_ijt
drop mean_unit_p_sale_ijt

save "ENIA_F3_pre_representative.dta", replace

*****************************************************************************************
*** prepare data to calcule equivalent units by industry CIIU 3 digits (PRESERVE/RESTORE)
*****************************************************************************************

preserve
joinby ID_PLANTA AÃ‘O using "ENIA_F1_list_of_ID_PLANTA_ID_FIRMA.dta", unmatched(both) _merge(merge) update
tab merge
sort ID_PLANTA AÃ‘O
keep if merge==3
drop merge
joinby ID_FIRMA AÃ‘O using "ENIA_F1_CIIU_by_Sales_Criterion.dta", unmatched(both) _merge(merge) update
tostring CIIU3_3D, replace
tab merge
keep if merge==3
drop merge

egen f3_valor_ventas_ijt=total(f3_valor_ventas), by(N_ID_PRODUCTO ID_PLANTA AÃ‘O CIIU3_3D)
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(ID_PLANTA AÃ‘O CIIU3_3D)
generate sh_f3_valor_ventas_jt=100*(f3_valor_ventas_ijt/f3_valor_ventas_jt)


* generate a CPC5/unit-F3 code by industry: all years, all firms
egen f3_unidad_num=group(f3_unidad)
egen sd_f3_unidad_num_j=sd(f3_unidad_num), by (ID_PRODUCTO CIIU3_3D f3_unidad)
replace f3_unidad="Invalid" if sd_f3_unidad_num_j!=0 & !missing(sd_f3_unidad_num_j)
replace f3_cantidad_ventas=. if sd_f3_unidad_num_j!=0 & !missing(sd_f3_unidad_num_j)
drop if f3_unidad=="Invalid"
replace f3_cantidad_ventas=. if f3_unidad=="s/u"

* collapse by cpc 5 digits, year, f3 measuring unit, by industry
collapse (firstnm) N_ID_PRODUCTO (max) max_sh_f3_sales_jt=sh_f3_valor_ventas_jt ///
 (sum) f3_valor_ventas f3_cantidad_ventas, by(ID_PRODUCTO AÃ‘O CIIU3_3D f3_unidad)
save "ENIA_F3_representative_paso_1.dta", replace
restore
 
* select years in which CPC3 are present
use "ENIA_F3_representative_paso_1.dta", clear
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(N_ID_PRODUCTO CIIU3_3D AÃ‘O)
keep if f3_valor_ventas_jt>0 & !missing(f3_valor_ventas_jt)
generate counter=1
collapse (first) counter , by(CIIU3_3D N_ID_PRODUCTO AÃ‘O)
drop counter
save "ENIA_F3_representative_present_CPC3_year.dta", replace

* joinby present CPC3 with CPC5 data
use "ENIA_F3_representative_paso_1.dta", clear
joinby AÃ‘O N_ID_PRODUCTO using "ENIA_F3_representative_present_CPC3_year.dta", unmatched(none) update _merge(merge)
drop merge
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(ID_PRODUCTO CIIU3_3D AÃ‘O)
keep if f3_valor_ventas_jt>0 & !missing(f3_valor_ventas_jt)
drop f3_valor_ventas_jt
save "ENIA_F3_representative_paso_2.dta", replace


use "ENIA_F3_representative_paso_2.dta", clear
levelsof CIIU3_3D , local(ciiu_code)
foreach c of local ciiu_code {
	use "ENIA_F3_representative_paso_2.dta", clear
	keep if CIIU3_3D=="`c'"
	levelsof N_ID_PRODUCTO, local(cpc3_code)
	foreach n of local cpc3_code {
	preserve
	keep if N_ID_PRODUCTO==`n'
	levelsof AÃ‘O, local(year_code)
	global year_cpc3 ""
	foreach y of local year_code {
	global year_cpc3 "$year_cpc3 f3_valor_ventas`y'"
	}
	keep CIIU3_3D ID_PRODUCTO AÃ‘O f3_valor_ventas f3_unidad
	sort CIIU3_3D ID_PRODUCTO f3_unidad AÃ‘O f3_valor_ventas 
	collapse f3_valor_ventas, by(CIIU3_3D ID_PRODUCTO f3_unidad AÃ‘O)
	reshape wide f3_valor_ventas , i(CIIU3_3D ID_PRODUCTO f3_unidad) j(AÃ‘O)
	sort CIIU3_3D ID_PRODUCTO f3_unidad
	egen count_miss_ij =rowmiss($year_cpc3)
	drop if count_miss_ij!=0
	keep CIIU3_3D ID_PRODUCTO f3_unidad
	gen N_ID_PRODUCTO=`n'
	save "$aux\ENIA_F3_sales_representative_CPC5_CPC3_`n'_CIIU_`c'.dta", replace
	restore
	}
}

use "ENIA_F3_representative_paso_2.dta", clear
levelsof CIIU3_3D , local(ciiu_code)
levelsof N_ID_PRODUCTO, local(cpc3_code)

use "$aux\ENIA_F3_sales_representative_CPC5_CPC3_2_CIIU_252.dta", clear
foreach c of local ciiu_code {
	foreach n of local cpc3_code {
	capture joinby CIIU3_3D N_ID_PRODUCTO ID_PRODUCTO f3_unidad using "$aux\ENIA_F3_sales_representative_CPC5_CPC3_`n'_CIIU_`c'.dta", unmatched(both) _merge(merge) update
	capture drop merge
	}
}
destring CIIU3_3D, replace
save "ENIA_F3_sales_representative_CPC5_CPC3_all_CIIU_all.dta", replace


****** Select CPC5 non missing in previous step and select representative CPC5 product
use "ENIA_F3_representative_paso_1.dta", clear
destring CIIU3_3D, replace
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(N_ID_PRODUCTO CIIU3_3D AÃ‘O)
keep if f3_valor_ventas_jt>0 & !missing(f3_valor_ventas_jt)
drop f3_valor_ventas_jt

joinby CIIU3_3D N_ID_PRODUCTO ID_PRODUCTO f3_unidad using "ENIA_F3_sales_representative_CPC5_CPC3_all_CIIU_all.dta", unmatched(none) update _merge(merge)
drop merge
 
egen f3_valor_ventas_jt=total(f3_valor_ventas), by(N_ID_PRODUCTO AÃ‘O CIIU3_3D)
egen f3_valor_ventas_t=total(f3_valor_ventas), by(AÃ‘O CIIU3_3D)

generate sh_f3_valor_ventas_jt=100*(f3_valor_ventas/f3_valor_ventas_jt)
egen mean_sh_f3_ventas_jt=mean(sh_f3_valor_ventas_jt), by(ID_PRODUCTO CIIU3_3D f3_unidad)
drop if f3_unidad=="s/u"
save "ENIA_F3_representative_paso_3.dta", replace


use "ENIA_F3_representative_paso_3.dta", clear
collapse (firstnm) N_ID_PRODUCTO (max) max_mean_sh_f3_ventas_jt=mean_sh_f3_ventas_jt , by(CIIU3_3D ID_PRODUCTO f3_unidad)
gsort CIIU3_3D N_ID_PRODUCTO -max_mean_sh_f3_ventas_jt
collapse (firstnm) f3_unidad ID_PRODUCTO, by(CIIU3_3D N_ID_PRODUCTO)
keep CIIU3_3D N_ID_PRODUCTO ID_PRODUCTO f3_unidad
save "ENIA_F3_max_mean_sale_CPC5_by_CPC3.dta", replace


use "ENIA_F3_representative_paso_3.dta", clear
joinby CIIU3_3D N_ID_PRODUCTO ID_PRODUCTO f3_unidad using "ENIA_F3_max_mean_sale_CPC5_by_CPC3.dta", unmatched(none) update _merge(merge)
drop merge
sort CIIU3_3D N_ID_PRODUCTO ID_PRODUCTO f3_unidad AÃ‘O
 keep ID_PRODUCTO f3_unidad AÃ‘O N_ID_PRODUCTO CIIU3_3D 
 generate f3_equiv_cpc5_pr_jt=ID_PRODUCTO
 generate f3_equiv_m_unit_ijt=f3_unidad
keep AÃ‘O N_ID_PRODUCTO CIIU3_3D f3_equiv_m_unit_ijt f3_equiv_cpc5_pr_jt
save "ENIA_F3_representative_CPC5.dta", replace


*************** calculate unit prices 
use "ENIA_F3_pre_representative.dta", clear
joinby ID_PLANTA AÃ‘O using "ENIA_F1_list_of_ID_PLANTA_ID_FIRMA.dta", unmatched(both) _merge(merge) update
tab merge
sort ID_PLANTA AÃ‘O
keep if merge==3
drop merge
joinby ID_FIRMA AÃ‘O using "ENIA_F1_CIIU_by_Sales_Criterion.dta", unmatched(both) _merge(merge) update
tab merge
keep if merge==3
drop merge

sort ID_PLANTA AÃ‘O ID_PRODUCTO

joinby AÃ‘O N_ID_PRODUCTO CIIU3_3D using "ENIA_F3_representative_CPC5.dta", unmatched(both) _merge(merge) update
drop merge

egen f3_valor_ventas_jtu = total(f3_valor_ventas), by(ID_PRODUCTO f3_unidad AÃ‘O CIIU3_3D)
egen f3_cantidad_ventas_jtu = total(f3_cantidad_ventas),  by(ID_PRODUCTO f3_unidad AÃ‘O CIIU3_3D)
gen f3_sale_unit_price = f3_valor_ventas_jtu / f3_cantidad_ventas_jtu

generate f3_equiv_unit_price=f3_sale_unit_price if f3_equiv_cpc5_pr_jt==ID_PRODUCTO & f3_equiv_m_unit_ijt==f3_unidad

egen aux_f3_equiv_unit_price=mean(f3_equiv_unit_price), by(CIIU3_3D N_ID_PRODUCTO AÃ‘O)
replace f3_equiv_unit_price=aux_f3_equiv_unit_price
drop aux_f3_equiv_unit_price

replace f3_equiv_m_unit_ijt="Invalid" if f3_equiv_unit_price==. & f3_equiv_m_unit_ijt==""
replace f3_equiv_cpc5_pr_jt=. if f3_equiv_unit_price==. & f3_equiv_m_unit_ijt==""
replace f3_equiv_cpc5_pr_jt=. if f3_equiv_unit_price==. & f3_equiv_m_unit_ijt=="Invalid"
generate ratio_unit_price=f3_sale_unit_price/f3_equiv_unit_price
generate f3_q_equiv_prod_ijt= f3_cantidad_producida*ratio_unit_price
generate f3_q_equiv_sale_ijt= f3_cantidad_ventas*ratio_unit_price
generate f3_q_equiv_exp_ijt= f3_venta_exp*ratio_unit_price

egen aux_f3_equiv_m_unit_ijt=mode(f3_equiv_m_unit_ijt), by(CIIU3_3D N_ID_PRODUCTO AÃ‘O)
replace f3_equiv_m_unit_ijt=aux_f3_equiv_m_unit_ijt
drop aux_f3_equiv_m_unit_ijt
egen aux_f3_equiv_cpc5_pr=mean(f3_equiv_cpc5_pr_jt), by(CIIU3_3D N_ID_PRODUCTO AÃ‘O)
replace f3_equiv_cpc5_pr_jt=aux_f3_equiv_cpc5_pr
drop aux_f3_equiv_cpc5_pr
drop f3_sale_unit_price f3_equiv_unit_price

replace f3_cantidad_ventas=. if f3_unidad=="s/u"
replace f3_cantidad_producida=. if f3_unidad=="s/u"

save "ENIA_F3_2002_2009_CPC5.dta", replace


collapse (firstnm) f3_equiv_m_unit_ijt f3_equiv_cpc5_pr_jt (sum) f3_prod_p_sale_ijt f3_cantidad_producida f3_costo_produccion ///
f3_cantidad_ventas f3_valor_ventas f3_venta_exp f3_q_equiv_sale_ijt f3_q_equiv_prod_ijt f3_q_equiv_exp_ijt, ///
 by(ID_PLANTA N_ID_PRODUCTO AÃ‘O f3_unidad)

replace f3_cantidad_producida=. if f3_unidad=="Missing"
replace f3_cantidad_ventas=. if f3_unidad=="Missing"
replace f3_q_equiv_sale_ijt=. if f3_equiv_m_unit_ijt=="Invalid"
replace f3_q_equiv_prod_ijt=. if f3_equiv_m_unit_ijt=="Invalid"
replace f3_q_equiv_exp_ijt=. if f3_equiv_m_unit_ijt=="Invalid"
replace f3_cantidad_ventas=. if f3_unidad=="s/u"
replace f3_cantidad_producida=. if f3_unidad=="s/u"

joinby ID_PLANTA AÃ‘O using "ENIA_F1_list_of_ID_PLANTA_ID_FIRMA.dta", unmatched(both) _merge(merge) update
tab merge
sort ID_PLANTA AÃ‘O
keep if merge==3
drop merge
sort ID_PLANTA AÃ‘O N_ID_PRODUCTO

joinby ID_FIRMA AÃ‘O using "ENIA_F1_CIIU_by_Sales_Criterion.dta", unmatched(both) _merge(merge) update
tab merge
keep if merge==3
drop merge

label variable N_ID_PRODUCTO "Fake CPC code, 3 digits"

replace f3_unidad="w/o unit" if f3_unidad=="s/u"
replace f3_unidad="doz" if f3_unidad=="doc"
replace f3_unidad="m" if f3_unidad=="m"
replace f3_unidad="m2" if f3_unidad=="m2"
replace f3_unidad="pair" if f3_unidad=="par"
replace f3_unidad="bdmt" if f3_unidad=="bdmt"

replace f3_equiv_m_unit_ijt="w/o unit" if f3_equiv_m_unit_ijt=="s/u"
replace f3_equiv_m_unit_ijt="doz" if f3_equiv_m_unit_ijt=="doc"
replace f3_equiv_m_unit_ijt="m" if f3_equiv_m_unit_ijt=="m"
replace f3_equiv_m_unit_ijt="m2" if f3_equiv_m_unit_ijt=="m2"
replace f3_equiv_m_unit_ijt="pair" if f3_equiv_m_unit_ijt=="par"
replace f3_equiv_m_unit_ijt="bdmt" if f3_equiv_m_unit_ijt=="bdmt"

rename CIIU3_3D CIIU3_3D_FIRMA
rename f3_unidad f3_measu_unit_ijtu
rename f3_equiv_m_unit_ijt f3_equiv_m_unit_jtu
rename f3_equiv_cpc5_pr_jt f3_equiv_cpc5_pr_jtu
rename f3_prod_p_sale_ijt f3_prod_p_sale_ijtu
rename f3_cantidad_producida f3_q_prod_ijtu
rename f3_costo_produccion f3_prod_ijtu
rename f3_cantidad_ventas f3_q_sale_ijtu
rename f3_valor_ventas f3_sale_ijtu
rename f3_venta_exp f3_q_exp_ijtu
rename f3_q_equiv_sale_ijt f3_q_equiv_sale_ijtu
rename f3_q_equiv_prod_ijt f3_q_equiv_prod_ijtu
rename f3_q_equiv_exp_ijt f3_q_equiv_exp_ijtu

save "ENIA_F3.dta", replace

